package com.happy.table;

import cn.hutool.json.JSONObject;

import java.util.List;

/**
 * @Author : Yan
 * @Description : 表格 封装 抽象类
 */
public class Table {

    // 表格的默认属性
    private TableProperty tableProperty = new TableProperty();

    // 表格的 行 标题
    private List<Filed> filedList;

    // 表格数据
    private List<?> data;

    // 替换table字符串拼接
    private String tableReplace = TableReplace.TABLE.getValue();

    // 表格html串
    private String tableHtml = "<table> \n" + this.tableReplace + "</table>";

    // 创建默认属性表格 数据和标题
    public Table(List<?> data, List<Filed> filedList) {
        System.out.println("创建默认性表格");
        this.data = data;
        this.filedList = filedList;

        // 设置tableHtml
        this.setTableHtml();
    }

    public Table(TableProperty tableProperty) {
        System.out.print("创建带有属性的表格");
        this.tableProperty = tableProperty;
    }

    // 获取表格的 property 属性
    public TableProperty getTableProperty() {
        return this.tableProperty;
    }

    // 获取表格html
    public String getTableHtml() {
        return this.tableHtml;
    }

    // 创建表格函数
    private void setTableHtml() {
        // 创建表格 标题头
        Tr trTh = new Tr(this.filedList);

        // 创建数据的字符串
        String trContent = "";
        // 循环数据
        for (Object obj : this.data) {
            // 转json对象
            JSONObject objJson = new JSONObject(obj);
            // 创建 tr 实例
            Tr trTd = new Tr(objJson, this.filedList);
            // 拼接所有 tr
            trContent += trTd.getTrHtml();
        }
        // 生成table
        this.tableHtml = this.tableHtml.replace(this.tableReplace, String.format("%s%s", trTh.getTrHtml(), trContent));
    }

}
